publish_internal_headers(rdma
  rdma/bnxt_re-abi.h
  rdma/cxgb4-abi.h
  rdma/efa-abi.h
  rdma/erdma-abi.h
  rdma/hns-abi.h
  rdma/ib_user_ioctl_cmds.h
  rdma/ib_user_ioctl_verbs.h
  rdma/ib_user_mad.h
  rdma/ib_user_sa.h
  rdma/ib_user_verbs.h
  rdma/irdma-abi.h
  rdma/mana-abi.h
  rdma/mlx4-abi.h
  rdma/mlx5-abi.h
  rdma/mlx5_user_ioctl_cmds.h
  rdma/mlx5_user_ioctl_verbs.h
  rdma/mthca-abi.h
  rdma/ocrdma-abi.h
  rdma/qedr-abi.h
  rdma/rdma_netlink.h
  rdma/rdma_user_cm.h
  rdma/rdma_user_ioctl.h
  rdma/rdma_user_ioctl_cmds.h
  rdma/rdma_user_rxe.h
  rdma/rvt-abi.h
  rdma/siw-abi.h
  rdma/vmw_pvrdma-abi.h
  )

publish_internal_headers(rdma/hfi
  rdma/hfi/hfi1_ioctl.h
  rdma/hfi/hfi1_user.h
  )

publish_internal_headers(linux
  linux/stddef.h
  linux/vfio.h
  )

function(rdma_kernel_provider_abi)
  # Older versions of cmake do not create the output directory automatically
  set(DDIR "${BUILD_INCLUDE}/kernel-abi")
  rdma_make_dir("${DDIR}")

  set(HDRS "")
  foreach(IHDR ${ARGN})
    get_filename_component(FIL ${IHDR} NAME)
    set(OHDR "${DDIR}/${FIL}")
    set(HDRS ${HDRS} ${OHDR})
    add_custom_command(
      OUTPUT "${OHDR}"
      COMMAND "${PYTHON_EXECUTABLE}" "${PROJECT_SOURCE_DIR}/buildlib/make_abi_structs.py" "${IHDR}" "${OHDR}"
      MAIN_DEPENDENCY "${IHDR}"
      DEPENDS "${PROJECT_SOURCE_DIR}/buildlib/make_abi_structs.py"
      WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
      COMMENT "Creating ABI wrapper ${OHDR}"
      )
  endforeach()

  # This weird construction is needed to ensure ordering of the build.
  add_library(kern-abi STATIC kern-abi.c ${HDRS})
endfunction()

# Transform the kernel ABIs used by the providers
rdma_kernel_provider_abi(
  rdma/bnxt_re-abi.h
  rdma/cxgb4-abi.h
  rdma/efa-abi.h
  rdma/erdma-abi.h
  rdma/hns-abi.h
  rdma/ib_user_verbs.h
  rdma/irdma-abi.h
  rdma/mana-abi.h
  rdma/mlx4-abi.h
  rdma/mlx5-abi.h
  rdma/mthca-abi.h
  rdma/ocrdma-abi.h
  rdma/qedr-abi.h
  rdma/rdma_user_rxe.h
  rdma/siw-abi.h
  rdma/vmw_pvrdma-abi.h
  )

publish_headers(infiniband
  rdma/ib_user_ioctl_verbs.h
  )

